// Promise 是异步编程的一种解决方案，他可以解决回调地狱的问题
// async 函数就是隧道尽头的亮光，很多人认为它是异步操作的终极解决方案
// await和async关键词能够将异步请求的结果以返回值的方式返回给我们
// async 用于修饰一个 function ，它修饰的函数，表示这个函数总是返回一个 Promise 对象
// await只能出现在async函数内部，二者配合使用，没有async修饰的函数中使用await是没有意义的，会报错
// await修饰一个返回Promise对象的函数。并且以返回值的方式接收 resolved 的结果
// 总结来说：async 表示函数总数返回Promise对象，await 修饰一个返回Promise对象的函数。
const fs = require('fs')

const myReadFile = path => {
  return new Promise((resolve, reject) => {
    // 在第一个promise的then中调用第二个
    fs.readFile(path, 'utf-8', (err, data) => {
      if (err) {
        reject(err)
      } else {
        console.log(data)
        resolve(data)
      }
    })
  }).catch(err => {
    console.log(err)
  })
}

async function readabc () {
  let a = 'js/ES6/promise测试/a.txt'
  let b = 'js/ES6/promise测试/b.txt'
  let c = 'js/ES6/promise测试/c.txt'
  await myReadFile(c)
  await myReadFile(b)
  await myReadFile(a)
}

readabc()
